home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / t_os / cdck106 / cdck106.bas next >
BASIC Source File  |  1993-07-08  |  12KB  |  278 lines

  1. 10 '***********************************
  2. 20 '* CDCHECK.BAS Copyright A.Okuyama *
  3. 30 '*  CD-DA表面検査プログラム   *
  4. 40 '* 1992. 3.16  Ver 1.05 1992. 6. 2 *
  5. 50 '***********************************
  6. 60 DIM CDI%(5),CDS%(8)
  7. 70 DIM TSSEC(200),TRKTIME$(200),ETRCOLOR(200),DVSTFLM(200)
  8. 80 START=0
  9. 90 CONSOLE 0,25,0:SCREEN@ 0:VIEW (0,0)-(639,479)
  10. 100 PALETTE  0,[16* 3,16* 0,16* 1]:'***** バック・グラウンドの緑色
  11. 110 PALETTE  1,[16* 4,16* 1,16* 2]:'***** 縁の緑色
  12. 120 PALETTE  2,[16* 5,16* 2,16* 3]:'***** 最大記録領域の緑色
  13. 130 PALETTE  3,[16* 5,16* 5,16* 5]:'***** 濃い灰色
  14. 140 PALETTE  4,[16* 1,16* 3,16* 3]:'***** 薄紫
  15. 150 PALETTE  5,[16* 0,16* 5,16* 5]:'***** 紫
  16. 160 PALETTE  6,[16* 6,16* 6,16* 6]:'***** 薄い灰色
  17. 170 PALETTE  7,[16* 0,16* 0,16* 5]:'***** 青(データ・トラック)
  18. 180 PALETTE  8,[16* 7,16* 0,16* 7]:'***** 水(検査中のトラック)
  19. 190 PALETTE 13,[16* 0,16* 0,16*11]:'***** 
  20. 200 PALETTE 14,[16* 0,16* 6,16* 6]:'*****
  21. 210 PALETTE 15,[16* 0,16*11,16* 0]:'*****
  22. 220 MOUSE 0:MOUSE 1,,,0
  23. 230 *MAIN:'*****************************
  24. 240 ON ERROR GOTO *ERRLOOP
  25. 250 PMTIME$="24:00:00"
  26. 260 FOR C=0 TO 200:TSSEC(C)=0:TRKTIME$(C)="":ETRCOLOR(C)=0:NEXT C
  27. 270 COLOR 0,%0,%0:CLS
  28. 280 LINE (0,19)-(639,25),PSET,%13,BF,%13
  29. 290 LINE (0,26)-(639,29),PSET,%14,BF,%14
  30. 300 LINE (0,30)-(639,37),PSET,%15,BF,%15
  31. 310 GOSUB *PANEL
  32. 320 IF START=0 THEN GOSUB *COMMENT:START=1
  33. 330 IF I$=CHR$(&H1B) THEN SYSTEM
  34. 340 EP=1
  35. 350 CD STOP
  36. 360 EP=0
  37. 370 GOSUB *INF
  38. 380 LPRN=1:ELPRN=0
  39. 390 GOSUB *LPRN
  40. 400 LPRN=0
  41. 410 GOSUB *TRKTIME
  42. 420 IF CDI%(1)=2 THEN ETRCOLOR(1)=3:GOSUB *STIME:GOTO *RES
  43. 430 GOSUB *STIME
  44. 440 GOSUB *START
  45. 450 *RES
  46. 460 LOCATE 5,3:COLOR 6:PRINT "《 [RETURN][実行]を押すと検査を開始します。[ESC]を押すと終了します。》"
  47. 470 GOSUB *PANEL
  48. 480 IF MOUSE(2,0)=-1 THEN *MAIN
  49. 490 IF MOUSE(2,1)=-1 THEN SYSTEM
  50. 500 I$=INKEY$:IF I$="" THEN *RES
  51. 510 IF I$=CHR$(27) THEN SYSTEM
  52. 520 IF I$=CHR$(13) THEN *MAIN ELSE *RES
  53. 530 *PANEL:'****************************
  54. 540 IF PMTIME$=TIME$ THEN RETURN
  55. 550 PMTIME$=TIME$
  56. 560 LOCATE 0,1
  57. 570 COLOR 12:PRINT "  A.Okuyama  Ver 1.06  ";
  58. 580 COLOR 14:PRINT "  CD-DA 表面検査 プログラム  ";
  59. 590 COLOR 12:PRINT USING "  &      &   &      &  ";DATE$;PMTIME$;
  60. 600 RETURN
  61. 610 *COMMENT:'***** コメント表示 *****
  62. 620 FOR C=0 TO 12
  63. 630 GOSUB *PANEL
  64. 640 PALETTE 10,[16*(3+C),16*C,16*(1+C)]:' ***** コメント色設定 *****
  65. 650 GOSUB *COMPRN
  66. 660 NEXT C
  67. 670 *COMCLS
  68. 680 GOSUB *PANEL
  69. 690 I$=INKEY$
  70. 700 IF I$=CHR$(&H18) OR I$=CHR$(&H1B) OR MOUSE(2,1) THEN I$=CHR$(&H1B):RETURN
  71. 710 IF I$="" AND NOT(MOUSE(2,0)) THEN *COMCLS
  72. 720 FOR C=12 TO 0 STEP -1
  73. 730 GOSUB *PANEL
  74. 740 PALETTE 10,[16*(3+C),16*C,16*(1+C)]:' ***** コメント消去 *****
  75. 750 COLOR 0:GOSUB *COMPRN
  76. 760 NEXT C
  77. 770 RETURN
  78. 780 *COMPRN:'***** コメント内容 *****
  79. 790 SYMBOL (9*27,18*3),"【 使 用 方 法 】",1,1,%10
  80. 800 SYMBOL (9*6,18*5),"[実行][RETURN]キー(マウスでは左のボタン)を押すと検査を開始します。",1,1,%10
  81. 810 SYMBOL (9*1,18*7),"[ESC]キー(マウスでは右のボタン)を押すと検査をキャンセルし、次の曲に進みます。",1,1,%10
  82. 820 SYMBOL (9*25,18*10),"【 使 用 上 の 注 意 】",1,1,%10
  83. 830 SYMBOL (9*0,18*12),"  (1) CDドライブ側のエラー訂正機構が働くため単発的な雑音は見逃す場合があ",1,1,%10
  84. 840 SYMBOL (9*0,18*13),"   ります。",1,1,%10
  85. 850 SYMBOL (9*0,18*15),"  (2) CDドライブ側のバッファの状態によって、対象トラックの直前に傷がある",1,1,%10
  86. 860 SYMBOL (9*0,18*16), "   場合などに再生不能と判定する時があります。",1,1,%10
  87. 870 SYMBOL (9*0,18*18),"  (3) ±1秒を超えるズレの生じない傷は見逃すことがあります。",1,1,%10
  88. 880 SYMBOL (9*0,18*20),"  (4) データ・トラックは検査しません。",1,1,%10
  89. 890 RETURN
  90. 900 *INF:'***** CDインフォメーション *****
  91. 910 ON ERROR GOTO *ERRLOOP
  92. 920 CDINF CDI%
  93. 930 TOTALFLM=(CDI%(2)*60+CDI%(3))*75+CDI%(4)
  94. 940 COLOR 7:LOCATE 0,0
  95. 950 ON CDI%(1) GOSUB *CD_INF1,*CD_INF2,*CD_INF3:GOTO *INFJP1
  96. 960 *CD_INF1
  97. 970 PRINT "音楽専用CDです。"
  98. 980 RETURN
  99. 990 *CD_INF2
  100. 1000 COLOR 2:PRINT "データ専用CDです。このプログラムでは検査できません。":COLOR 7:ETRCOLOR(1)=3:DVSTFLM(1)=TOTALFLM:GOSUB *CDVIEW
  101. 1010 RETURN
  102. 1020 *CD_INF3
  103. 1030 PRINT "音楽・データ共用CDです。"
  104. 1040 RETURN
  105. 1050 *INFJP1
  106. 1060 IF CDI%(1)=2 THEN *INFJP2
  107. 1070 COLOR 5:LOCATE 30,0:PRINT "水色は再生中"
  108. 1080 COLOR 1:LOCATE 44,0:PRINT "青色はデータ"
  109. 1090 COLOR 3:LOCATE 58,0:PRINT "紫色は再生不能"
  110. 1100 *INFJP2
  111. 1110 COLOR 7:LOCATE 0,2:PRINT USING "《 全### 曲 ### 分### 秒### フレーム 》";CDI%(5);CDI%(2);CDI%(3);CDI%(4)
  112. 1120 'TOTALFLM=(CDI%(2)*60+CDI%(3))*75+CDI%(4)
  113. 1130 RETURN
  114. 1140 *LPRN:'***** プリント印刷処理 *****
  115. 1150 ON ERROR GOTO *ERRLOOP
  116. 1160 IF CDI%(1)=2 THEN RETURN
  117. 1170 LPRINT DATE$;"  ";TIME$;"   ";
  118. 1180 IF CDI%(1)=1 THEN LPRINT "音楽専用CD " ELSE IF CDI%(1)=3 THEN LPRINT "音楽・データ共用CD "
  119. 1190 LPRINT USING "全### 曲 ###分###秒###フレームです。";CDI%(5);CDI%(2);CDI%(3);CDI%(4)
  120. 1200 IF ELPRN=0 THEN LOCATE 72,0:COLOR 2:PRINT "〔印刷〕";
  121. 1210 RETURN
  122. 1220 *TRKTIME:'***** 各トラック先頭までのフレーム総数 *****
  123. 1230 FOR C=1 TO CDI%(5)
  124. 1240 TSSEC(C)=VAL(LEFT$(CDSTIME$(C),2))*60+INT(VAL(MID$(CDSTIME$(C),4,2))+VAL(RIGHT$(CDSTIME$(C),2))/75+.5!)
  125. 1250 TSSEC=VAL(LEFT$(CDSTIME$(C),2))*60+VAL(MID$(CDSTIME$(C),4,2))
  126. 1260 IF CDI%(5)<C+1 THEN 
  127. 1270     TESEC=CDI%(2)*60+CDI%(3)
  128. 1280 ELSE
  129. 1290     TESEC=VAL(LEFT$(CDSTIME$(C+1),2))*60+VAL(MID$(CDSTIME$(C+1),4,2))
  130. 1300 ENDIF
  131. 1310 TSFLM=VAL(RIGHT$(CDSTIME$(C),2))
  132. 1320 IF CDI%(5)<C+1 THEN
  133. 1330     TEFLM=CDI%(4)
  134. 1340 ELSE
  135. 1350     TEFLM=VAL(RIGHT$(CDSTIME$(C+1),2))
  136. 1360 ENDIF
  137. 1370 TRACKSEC=INT(TESEC)-INT(TSSEC)+INT((TEFLM-TSFLM)/75)
  138. 1380 TRKTIME$(C)=RIGHT$(STR$(100+INT(TRACKSEC/60)),2)+":"+RIGHT$(STR$(100+(TRACKSEC MOD 60)),2)+":"+RIGHT$(STR$(100+(75+TEFLM-TSFLM) MOD 75),2)
  139. 1390 DVSTFLM(C-1)=TSSEC(C)*75
  140. 1400 NEXT C
  141. 1410 DVSTFLM(C-1)=TOTALFLM
  142. 1420 RETURN
  143. 1430 *STIME:'***** 1~80曲目の時間表示 *****
  144. 1440 FOR C=1 TO CDI%(5)
  145. 1450 IF 80<C THEN *STJP
  146. 1460 IF C=CDS%(5) THEN COLOR 5-ETRCOLOR(C)*2 ELSE COLOR 4-ETRCOLOR(C)
  147. 1470 LOCATE 20*INT((C-1)/20),3+C-20*INT((C-1)/20):PRINT USING "### 曲目 ";C;:PRINT TRKTIME$(C)
  148. 1480 *STJP
  149. 1490 NEXT C
  150. 1500 RETURN
  151. 1510 *START:'***** 検査開始トラック指定 *****
  152. 1520 CKTOTAL=0
  153. 1530 IF CDI%(1)=3 THEN STRACK=2:ETRCOLOR(1)=3 ELSE STRACK=1
  154. 1540 *ERSTART:'***** 新トラック検査開始 *****
  155. 1550 XTIME=0:MTIME=0:CDS%(6)=0:CDS%(7)=0:CDS%(8)=0:ONMIN=0:ONSEC=0:MOUSE 0
  156. 1560 CDS%(2)=VAL(LEFT$(CDSTIME$(STRACK),2))
  157. 1570 CDS%(3)=VAL(MID$(CDSTIME$(STRACK),4,2))
  158. 1580 CDS%(4)=VAL(RIGHT$(CDSTIME$(STRACK),2))
  159. 1590 CKMIN=VAL(LEFT$(CDSTIME$(STRACK),2))
  160. 1600 CKSEC=VAL(MID$(CDSTIME$(STRACK),4,2))
  161. 1610 CKFLM=VAL(RIGHT$(CDSTIME$(STRACK),2))
  162. 1620 CKTOTAL=CKMIN*60+CKSEC+CKFLM/75:'    ***** 指定トラック総合秒数 *****
  163. 1630 COLOR 5:LOCATE 0,3:PRINT USING "《 演奏位置 ### 分### 秒### フレーム 》";CDS%(2);CDS%(3);CDS%(4)
  164. 1640 COLOR 5:LOCATE 40,3:PRINT USING "### 曲目### 分### 秒目を検査中。";STRACK;ONMIN;ONSEC
  165. 1650 I$=INKEY$:IF I$=CHR$(27) THEN *ENST:'***** キャンセル(KEYBOAD)*****
  166. 1660 IF MOUSE(2,1)=-1 THEN *ENST:'        ***** キャンセル( MOUSE )*****
  167. 1670 CD PLAY STRACK:'                     ***** 指定トラック検査開始 *****
  168. 1680 CDSTAT CDS%:DEDUCT=TIME:'            ***** DEDUCT=検査開始時刻 *****
  169. 1690 COLOR 7:LOCATE 40,2:PRINT SPACE$(39)
  170. 1700 GOSUB *STIME
  171. 1710 GOSUB *CDVIEW
  172. 1720 *CHECK:'***** 繰り返し検査工程 *****
  173. 1730 ON ERROR GOTO 0
  174. 1740 GOSUB *PANEL
  175. 1750 I$=INKEY$:IF I$=CHR$(27) THEN *ENST:'***** キャンセル(KEYBOAD)*****
  176. 1760 IF MOUSE(2,1)=-1 THEN *ENST:'        ***** キャンセル( MOUSE )*****
  177. 1770 ON ERROR GOTO *ERRLOOP
  178. 1780 ONMIN=CDS%(6):ONSEC=CDS%(7)
  179. 1790 CDSTAT CDS%:XMTIME=XTIME:XTIME=TIME:'*****  CD演奏状態取得  *****
  180. 1800 IF XTIME<XMTIME THEN XTIME=XTIME+3600*24:'***** 日替わり調整 *****
  181. 1810 IF CDS%(1)=0 THEN *ENST:'            ***** 指定トラック検査終了 *****
  182. 1820 CKMIN=CDS%(2):CKSEC=CDS%(3):CKFLM=CDS%(4)
  183. 1830 IF CKMIN*60+CKSEC+CKFLM/75<CKTOTAL THEN CKTOTAL=-ABS(CKTOTAL):'ERROR 53
  184. 1840 IF MTIME<CDS%(6)*60+CDS%(7)+INT(CDS%(8)/75+.5!) THEN
  185. 1850     MTIME=CDS%(6)*60+CDS%(7)+INT(CDS%(8)/75+.5!)
  186. 1860 ELSE 
  187. 1870     IF CDS%(6)*60+CDS%(7)+INT(CDS%(8)/75+.5!)<MTIME THEN
  188. 1880         GOTO *RET
  189. 1890     ELSE
  190. 1900         MTIME=MTIME+XTIME-XMTIME
  191. 1910         GOTO *RET
  192. 1920     ENDIF
  193. 1930 ENDIF
  194. 1940 IF XTIME<DEDUCT+CDS%(6)*60+CDS%(7)+INT(CDS%(8)/75+.5!)-1 OR DEDUCT+CDS%(6)*60+CDS%(7)+INT(CDS%(8)/75+.5!)+1<XTIME THEN ERROR 53
  195. 1950 *RET:'PRINT USING"XT:#### XMT:#### MT:#### CK:####     ";XTIME-DEDUCT;XMTIME-DEDUCT;MTIME;CDS%(6)*60+CDS%(7)+INT(CDS%(8)/75+.5!):'***CK POINT***
  196. 1960 CKTOTAL=CKMIN*60+CKSEC+CKFLM/75
  197. 1970 COLOR 5:LOCATE 0,3:PRINT USING "《 演奏位置 ### 分### 秒### フレーム 》";CDS%(2);CDS%(3);CDS%(4)
  198. 1980 IF PONMIN=ONMIN AND PONSEC=ONSEC THEN *CHECK
  199. 1990 COLOR 13:LOCATE 40,3:PRINT USING "### 曲目### 分### 秒目を検査中。";CDS%(5);ONMIN;ONSEC
  200. 2000 PONMIN=ONMIN:PONSEC=ONSEC
  201. 2010 GOTO *CHECK
  202. 2020 *ENST:'***** 指定トラック検査終了 *****
  203. 2030 STRACK=STRACK+1
  204. 2040 IF STRACK<=CDI%(5) THEN 
  205. 2050     GOTO *ERSTART
  206. 2060 ELSE
  207. 2070     STRACK=CDI%(5)
  208. 2080 ENDIF
  209. 2090 COLOR 5:LOCATE 40,2:PRINT " お疲れさま! 検査は終了しました。      "
  210. 2100 LOCATE 0,3:PRINT SPACE$(79)
  211. 2110 CDS%(5)=0:GOSUB *STIME:GOSUB *CDVIEW
  212. 2120 RETURN
  213. 2130 *CDVIEW:'***** CD表面イメージ表示 *****
  214. 2140 DVX=439:DVY=300:PKMIN=64
  215. 2150 VTMIN=TOTALFLM/74/60
  216. 2160 IF 1<VTMIN/PKMIN THEN VTMIN=PKMIN
  217. 2170 VFLM=INT(((145^2-70^2)*VTMIN/PKMIN+70^2)^.5!)
  218. 2180 CIRCLE (DVX,DVY),157,%1
  219. 2190 CIRCLE (DVX,DVY),155,%1,,,,F
  220. 2200 CIRCLE (DVX,DVY),148,%2,,,,F
  221. 2210 CIRCLE (DVX,DVY),VFLM,%3,,,,F
  222. 2220 GOSUB *CDCKVIEW
  223. 2230 CIRCLE (DVX,DVY),69,%2,,,,F
  224. 2240 *CDVIEW2
  225. 2250 CIRCLE (DVX,DVY),63,%1,,,,F
  226. 2260 CIRCLE (DVX,DVY),55,%0,,,,F,PRESET
  227. 2270 CIRCLE (DVX,DVY),52,%1
  228. 2280 CIRCLE (DVX,DVY),48,%1
  229. 2290 CIRCLE (DVX,DVY),35,%1
  230. 2300 CIRCLE (DVX,DVY),22,%1
  231. 2310 CIRCLE (DVX,DVY),20,%1
  232. 2320 RETURN
  233. 2330 *CDCKVIEW:'***** CDチェック箇所イメージ表示 *****
  234. 2340 FOR CDV=CDI%(5) TO 1 STEP -1
  235. 2350 VLFLM=INT(((145^2-70^2)*DVSTFLM(CDV)/74/60/PKMIN+70^2)^.5!*VFLM/((145^2-70^2)*TOTALFLM/74/60/PKMIN+70^2)^.5!+.5!)
  236. 2360 IF ETRCOLOR(CDV)=3 THEN CIRCLE (DVX,DVY),VLFLM,%7,,,,F:GOTO *CDCKJP1
  237. 2370 IF ETRCOLOR(CDV)=1 AND CDV=INT(CDV/2)*2 THEN CIRCLE (DVX,DVY),VLFLM,%4,,,,F:GOTO *CDCKJP1
  238. 2380 IF ETRCOLOR(CDV)=1 AND CDV<>INT(CDV/2)*2 THEN CIRCLE (DVX,DVY),VLFLM,%5,,,,F:GOTO *CDCKJP1
  239. 2390 IF CDV=CDS%(5) THEN CIRCLE (DVX,DVY),VLFLM,%8,,,,F:GOTO *CDCKJP1
  240. 2400 IF CDV=INT(CDV/2)*2 THEN
  241. 2410     CIRCLE (DVX,DVY),VLFLM,%6,,,,F
  242. 2420 ELSE
  243. 2430     CIRCLE (DVX,DVY),VLFLM,%3,,,,F
  244. 2440 ENDIF
  245. 2450 *CDCKJP1
  246. 2460 NEXT CDV
  247. 2470 RETURN
  248. 2480 *ERRLOOP:'***** エラー処理ルーチン *****
  249. 2490 IF EP=1 THEN *ERRLOOP2
  250. 2500 COLOR 2
  251. 2510 IF LPRN=1 THEN ELPRN=1:LOCATE 40,2:COLOR 10:PRINT " 《 印刷機能は停止しています。》":RESUME NEXT
  252. 2520 LOCATE 40,2:PRINT USING "### 曲目### 分### 秒目付近が再生不能。";STRACK;ONMIN;ONSEC
  253. 2530 OUT &H04C0,&HC7:OUT &H04C0,&H03
  254. 2540 IF CDI%(5)<STRACK THEN STRACK=CDI%(5):RESUME *ENST
  255. 2550 IF ELPRN=0 THEN LPRINT USING "###曲目###分###秒目(Total###分###秒目)付近が再生不能です。";STRACK;ONMIN;ONSEC;CKMIN;CKSEC
  256. 2560 IF CDS%(5)=CDI%(5) THEN 
  257. 2570     ETRCOLOR(CDI%(5))=1:GOSUB *STIME:RESUME *ENST
  258. 2580 ELSE
  259. 2590     ETRCOLOR(STRACK)=1:STRACK=STRACK+1:CDS%(5)=STRACK:CKMIN=CDS%(2)
  260. 2600     CKSEC=CDS%(3):CKFLM=CDS%(4)
  261. 2610 ENDIF
  262. 2620 GOSUB *STIME:RESUME *ERSTART
  263. 2630 *ERRLOOP2:'***** CD未挿入 *****
  264. 2640 COLOR 10
  265. 2650 LOCATE 24,12:PRINT " 《 CDをセットしてください 》 "
  266. 2660 C=0
  267. 2670 *ERRLP21
  268. 2680 GOSUB *PANEL
  269. 2690 I$=INKEY$
  270. 2700 IF 2000<C OR I$<>"" OR MOUSE(2,1)=-1 THEN *ERRLP22
  271. 2710 C=C+1
  272. 2720 GOTO *ERRLP21
  273. 2730 *ERRLP22
  274. 2740 COLOR 0
  275. 2750 LOCATE 24,12:PRINT "                                "
  276. 2760 START=0:EP=0
  277. 2770 RESUME *MAIN
  278.